Cos'è mal dei primitives?

Mal dei Primitives

Il "mal dei primitives" (primitive obsession in inglese) è un antipattern di progettazione software che si verifica quando un programmatore si affida eccessivamente a tipi di dati primitivi come interi, stringhe, booleani, date e valute per rappresentare concetti e dati complessi all'interno di un'applicazione. Invece di creare classi o oggetti specifici per modellare questi concetti, si ricorre a variabili primitive.

Problemi Causati dal Mal dei Primitives:

  • Minore leggibilità e manutenibilità: Il codice diventa più difficile da comprendere e modificare perché il significato dei valori primitivi non è immediatamente ovvio. Si perde in chiarezza semantica.
  • Codice duplicato: La logica per la validazione, la manipolazione o la formattazione di questi valori primitivi viene spesso duplicata in diverse parti del codice.
  • Difficile refactoring: Cambiare la rappresentazione di un concetto (ad esempio, passare da una stringa per rappresentare un codice prodotto a un oggetto ProductCode) richiede modifiche in molte parti del codice, rendendo il refactoring rischioso.
  • Accoppiamento elevato: Molti componenti del codice dipendono direttamente dalla rappresentazione primitiva dei dati, creando un forte accoppiamento.
  • Meno tipi di errori rilevati al momento della compilazione: A causa dell'uso di tipi primitivi, gli errori che potrebbero essere rilevati al momento della compilazione (ad esempio, passare una stringa errata a una funzione che si aspetta un codice prodotto) vengono rilevati solo a runtime.

Esempio:

Invece di rappresentare un indirizzo con un oggetto Indirizzo contenente campi come Via, Città, CAP, si usano stringhe separate per ciascun campo.

Soluzioni:

Il mal dei primitives può essere risolto applicando i seguenti principi:

  • Creazione di classi valore (Value Objects): Incapsula il dato primitivo in una classe che rappresenta il concetto in modo più esplicito. Questa classe può contenere logica per la validazione, la formattazione e altre operazioni correlate.
  • Utilizzo di tipi di dati più appropriati: A volte, un tipo di dato primitivo specifico (ad esempio, un enum invece di una stringa per rappresentare uno stato) può migliorare la leggibilità e la sicurezza del codice.
  • Introduzione di oggetti: Se un concetto è più complesso di un semplice valore, creare un oggetto con proprietà e metodi appropriati.

Benefici dell'Eliminazione del Mal dei Primitives:

  • Maggiore leggibilità e manutenibilità: Il codice diventa più facile da capire e modificare.
  • Minore codice duplicato: La logica è centralizzata nelle classi valore o negli oggetti.
  • Refactoring più semplice: Modificare la rappresentazione di un concetto richiede modifiche in un numero limitato di posti.
  • Accoppiamento inferiore: I componenti del codice dipendono meno dalla rappresentazione specifica dei dati.
  • Rilevamento di più errori al momento della compilazione: L'uso di tipi più specifici consente al compilatore di rilevare più errori in anticipo.

In sintesi, evitare il mal dei primitives porta a un codice più robusto, mantenibile e facile da comprendere, migliorando significativamente la qualità complessiva del software.